using System.Drawing;
using FastColoredTextBoxNS;
using System.ComponentModel.Composition;

namespace SS.Ynote.Classic.Themes
{
    [InheritedExport(typeof(IYnoteThemeExtension))]
    public class AvalonEditThemeCore : IYnoteThemeExtension
    {
        public string Name
        {
            get { return "AvalonEdit"; }
        }

        public string Author
        {
            get { return "Samarjeet Singh"; }
        }

        public IYnoteTheme Theme
        {
            get { return new AvalonEditTheme(); }
        }
    }
    public class AvalonEditTheme : IYnoteTheme
    {
        /// <summary>
        /// String style
        /// </summary>
        public Style StringStyle
        {
        get { return new TextStyle(Brushes.Blue , null, FontStyle.Regular); }
        }
        public Style CharStyle
        {
            get { return new TextStyle(Brushes.Gray , null, FontStyle.Regular); }
        }
        /// <summary>
        /// Comment style
        /// </summary>
        public Style CommentStyle { get { return new TextStyle(Brushes.DimGray, null, FontStyle.Italic); } }
        /// <summary>
        /// Number style
        /// </summary>
        public Style NumberStyle { get { return new TextStyle(Brushes.Red, null, FontStyle.Regular); } }
        /// <summary>
        /// C# attribute style
        /// </summary>
        public Style AttributeStyle { get { return new TextStyle(Brushes.Green, null, FontStyle.Regular); } }
        /// <summary>
        /// Class name style
        /// </summary>
        public Style ClassNameStyle { get { return new TextStyle(Brushes.PowderBlue, null, FontStyle.Bold); } }
        /// <summary>
        /// Keyword style
        /// </summary>
        public Style KeywordStyle { get { return new TextStyle(Brushes.Green, null, FontStyle.Bold); } }
        /// <summary>
        /// Style of tags in comments of C#
        /// </summary>
        public Style CommentTagStyle { get { return new TextStyle(Brushes.LightGray, null, FontStyle.Italic); } }

        /// <summary>
        /// HTML attribute value style
        /// </summary>
        public Style AttributeValueStyle { get { return new TextStyle(Brushes.Maroon, null, FontStyle.Regular); } }
        /// <summary>
        /// HTML tag brackets style
        /// </summary>
        public Style TagBracketStyle { get { return new TextStyle(Brushes.Green, null, FontStyle.Regular); } }
        /// <summary>
        /// HTML tag name style
        /// </summary>
        public Style TagNameStyle { get { return new TextStyle(Brushes.SkyBlue, null, FontStyle.Regular); } }
        /// <summary>
        /// HTML Entity style
        /// </summary>
        public Style HtmlEntityStyle { get { return new TextStyle(Brushes.Red, null, FontStyle.Regular); } }

        /// <summary>
        /// Variable style
        /// </summary>
        public Style VariableStyle { get { return new TextStyle(Brushes.Purple, null, FontStyle.Regular); } }
        /// <summary>
        /// Specific PHP keyword style
        /// </summary>
        public Style KeywordStyle2 { get { return new TextStyle(Brushes.Red, null, FontStyle.Bold); } }
        /// <summary>
        /// Specific PHP keyword style
        /// </summary>
        public Style KeywordStyle3 { get { return new TextStyle(Brushes.Blue, null, FontStyle.Bold); } }
        /// <summary>
        /// SQL Statements style
        /// </summary>
        public Style StatementsStyle { get { return new TextStyle(Brushes.HotPink, null, FontStyle.Bold); } }
        /// <summary>
        /// SQL Functions style
        /// </summary>
        public Style FunctionsStyle { get { return KeywordStyle; } }
        /// <summary>
        /// SQL Types style
        /// </summary>
        public Style TypesStyle { get { return new TextStyle(Brushes.SlateBlue, null, FontStyle.Bold); } }
        /// <summary>
        /// CSS Selector Style
        /// </summary>
        public Style CSSSelectorStyle { get { return new TextStyle(Brushes.Black, null, FontStyle.Bold); } }
        /// <summary>
        /// CSS Property Style
        /// </summary>
        public Style CSSPropertyStyle { get { return new TextStyle(Brushes.DeepSkyBlue, null, FontStyle.Regular); } }
        /// <summary>
        /// Class Name Style2
        /// </summary>
        public Style ClassNameStyle2 { get { return new TextStyle(Brushes.SlateBlue, null, FontStyle.Bold); } }
        /// <summary>
        /// Back Color
        /// </summary>
        public Color BackColor { get { return Color.White; } }
        /// <summary>Black
        /// Fore Color
        /// </summary>
        public Color ForeColor { get { return Color.Black; } }
        /// <summary>
        /// Bookmark Color
        /// </summary>
        public Color BookmarkColor { get { return Color.GhostWhite; } }
        /// <summary>
        /// Line Number Color
        /// </summary>
        public Color LineNumberColor { get { return Color.Black; } }
        /// <summary>
        /// Current Line Color
        /// </summary>
        public Color CurrentLineColor { get { return Color.Yellow ; } }
        /// <summary>
        /// Selection Color
        /// </summary>
        public Color SelectionColor { get { return Color.FromArgb(80, Color.LightGray); } }
        /// <summary>
        /// Folding Indication Color
        /// </summary>
        public Color FoldingColor { get { return Color.Gray; } }
        /// <summary>
        /// Caret Color
        /// </summary>
        public Color CaretColor { get { return Color.Black; } }
        /// <summary>
        /// 
        /// </summary>
        public Brush BracketBrush1 { get { return new SolidBrush(Color.FromArgb(100, Color.SlateGray)); } }
        /// <summary>
        /// Bracket Brush 2
        /// </summary>
        public Brush BracketBrush2 { get { return new SolidBrush(Color.FromArgb(100, Color.Blue)); } }
        /// <summary>
        /// Line Number Padding Color
        /// </summary>
        public Color LineNumberPaddingColor { get { return Color.FromArgb(200, Color.White); } }
        /// <summary>
        /// Service Line Color
        /// </summary>
        public Color ServiceLineColor { get { return Color.White; } }
        /// <summary>
        /// Hyperlink Color
        /// </summary>
        public Color HyperLinkColor { get { return Color.Blue; } }
    }
}
